package br.ucb.service.impl;

import java.util.List;

import br.ucb.dao.EntidadeDAO;
import br.ucb.entidade.Entidade;
import br.ucb.excecao.RegrasException;
import br.ucb.service.EntidadeService;

public abstract class AbstractEntidadeService_1<E extends Entidade, D extends EntidadeDAO<E>> implements EntidadeService<E,D>{

	protected D dao;
	
	public List<E> find(E entidade) {
		return getDao().find(entidade);
	}
	
	public List<E> findAll() {
		return getDao().findAll();
	}

	public E findByKey(E entidade) {
		return getDao().findByKey(entidade);
	}

	public Boolean insert(E entidade) throws RegrasException {
		validarRegras(entidade);
		return getDao().insert(entidade);
	}
	
	public Boolean update(E entidade) {
		validarRegras(entidade);
		return getDao().update(entidade);
	}

	public Boolean remove(E entidade) throws RegrasException{
		return getDao().remove(entidade);
	}
	
	abstract public void inicializarDao();

	public D getDao() {
		if(dao == null){
			inicializarDao();
		}
		return dao;
	}
	
	protected abstract void validarRegras(E entidade) throws RegrasException;

}
